﻿using System.Web;
using System.Web.Mvc;
using music.core;
using music.domain.Model.Dto;

namespace music.web.Models.Shared
{
	public class SongModel : SongDto
	{
		#region display properties

		/// <summary>
		/// Полное название
		/// </summary>
		public string FullTitle
		{
			get { return string.Format("{0} - {1}", Artist, Title); }
		}

		/// <summary>
		/// Признак наличия описания
		/// </summary>
		public bool HasDescription
		{
			get { return !string.IsNullOrWhiteSpace(Description); }
		}

		/// <summary>
		/// Текст описания для отображения на странице
		/// </summary>
		public string DisplayDescription
		{
			get
			{
				return Utils.PrepareText(Description);
			}
		}

		/// <summary>
		/// Дата добавления песни (для отображения на странице)
		/// </summary>
		public string DisplayCreated
		{
			get { return Created.ToString("dd.MM.yyyy, HH:mm"); }
		}

		/// <summary>
		/// Логин пользователя, добавившего песню (для отображения на странице)
		/// </summary>
		public string DisplayUserLogin
		{
			get { return string.IsNullOrWhiteSpace(UserLogin) ? Resources.Common.EmptyUserLogin : UserLogin; }
		}

		/// <summary>
		/// Количество прослушиваний песни (для отображения на странице)
		/// </summary>
		public string DisplayDownloadCount
		{
			get { return string.Format(Resources.Common.DownloadCount, DownloadCount); }
		}

		public string CommentsTitle
		{
			get
			{
				return CommentsCount == 0
					? Resources.Common.Comments
					: string.Format(Resources.Common.CommentsWithCount, CommentsCount);
			}
		}

		#endregion

		#region rates

		public string PositiveRateStyle
		{
			get { return RateValue > 0 ? "selected" : string.Empty; } // todo: вынести название активного класса
		}

		public string NegativeRateStyle
		{
			get { return RateValue < 0 ? "selected" : string.Empty; }
		}

		public string EmptyRateStyle
		{
			get { return RateValue == 0 ? "selected" : string.Empty; }
		}

		public string RateName
		{
			get
			{
				return RateValue == 0
						? Resources.Common.SongRateEmpty
						: RateValue > 0
							? Resources.Common.SongRatePositive
							: Resources.Common.SongRateNegative;
			}
		}

		#endregion

		#region urls

		public string GetInfoUrl(UrlHelper url)
		{
			return url.Action("Info", "Home", new { id = Id });
		}

		public string GetFileUrl(UrlHelper url)
		{
			return url.Action("Index", "File", new { id = Id });
		}

		public string GetSetRateUrl(UrlHelper url, int rate)
		{
			return url.Action("SetRate", "Home", new { songId = Id, newRate = rate });
		}

		#endregion
	}
}